/*
 * Copyright (C), 2016-2019, 上海巧房信息技术有限公司
 * ClassName: SMSUtils
 * Author:   liushihao
 * Date:     2019/7/24 2:29 PM
 * Description: //模块目的、功能描述
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名     修改时间      版本号        描述
 */
package com.qiaofang.applet.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qiaofang.applet.common.dto.SmsDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 〈一句话功能简述〉<br>
 * 发送短信
 *
 * @author liushihao
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
@Component
@Slf4j
public class SmsUtil {

    private static RestTemplate restTemplate = new RestTemplate();

    /**
     * 发送短信
     *
     * @param smsDto
     * @return
     */
    public boolean sendSms(SmsDto smsDto) {
        JSONObject param = new JSONObject();
        //系统账号token
        param.put("token", smsDto.getToken());
        //系统账号密码
        param.put("secret", smsDto.getSecret());
        //主账号编码
        param.put("mainAccountCode", smsDto.getMainAccountCode());
        //子账号编码
        param.put("subAccountCode", smsDto.getSubAccountCode());
        //短信模块ID
        param.put("templateId", smsDto.getTemplateId());
        param.put("templateParas", smsDto.getTemplateParam());
        param.put("targets", smsDto.getMobiles());
        HttpEntity<Map<String, Object>> request = new HttpEntity<>(param, null);
        JSONObject result = restTemplate.postForEntity(smsDto.getUrl(), request, JSONObject.class).getBody();
        log.info("send sms validateCode request:{},response:{}", JSON.toJSONString(smsDto), result);
        return result != null && StringUtils.equals("1", result.getString("responseCode"));
    }

    public static void main(String[] args) {
        SmsUtil smsUtil = new SmsUtil();
        Map<String, Object> templateParam = new HashMap<>();
        templateParam.put("key1", "123456");
        smsUtil.sendSms(SmsDto.builder()
                .url("http://qfcc.qiaofangyun.com/api/call/standard/v1/sms/sendSms")
                .token("b403e547-2da9-4e9c-98b3-c8e0701d1d12")
                .secret("b5a4a597-521b-4b1c-bc96-7edcd6e8ce01")
                .mainAccountCode("85159")
                .subAccountCode("85159101")
                .templateId("qfdkh004")
                .templateParam(templateParam)
                .mobiles(Arrays.asList("18210058085"))
                .build());
    }
}
